//============================================================================
// Name        : Main.cpp
// Author      : O.M.A.V.
// Description : De hoofdklasse van de server applicatie
//============================================================================

// Include
#include <iostream>
#include <string>
#include <sstream>
#include <stdio.h>
#include "Connection.h"
//
// Namespace
using namespace std;

// test comment
// Function prototype
void getInput();
void getPortNr(int argc, char *argv[]);
void checkPort(int portNr);

// Variabelen
string input;
int port;
Connection *server;

// Main function van de application
int main(int argc, char *argv[])
{
	// Haal poort nummer op
	getPortNr(argc, argv);

	// Start server wanneer port bekend is
	if(port != 0)
	{
		server = new Connection(port);
	}

	return 0;
}

// vraag portnummer
void getPortNr(int argc, char *argv[])
{
	// Geen argumenten opgegeven
	if(argc != 2)
	{
		cout << "No argument given, please enter a valid port" << endl;

		getInput();
	}
	// Wel argumenten opgegeven
	else
	{
		// indien er letters na nummers ingevoerd, zullen de letters worden genegeerd
		std::istringstream iss(argv[1]);

		int port;

		// Invoer is wel een getal
		if(iss >> port)
		{
			checkPort(port);
		}
		// Invoer is geen getal
		else
		{
			cout << "Argument is not a number" << endl;

			getInput();
		}
	}
}

// Vraag om invoer van een poortnummer
void getInput()
{
	cout << "Port number: ";
	cin >> input;

	// indien er letters na nummers ingevoerd, zullen de letters worden genegeerd
	std::istringstream iss(input);

	int port;

	// Invoer is wel een getal
	if(iss >> port)
	{
		checkPort(port);
	}
	// Invoer is geen getal
	else
	{
		cout << "Input is not a number" << endl;
		getInput();
	}
}

// Check of poortnummer goed is
void checkPort(int portNr)
{
	// Input is correct
	if(portNr < 65535 && portNr > 0)
	{
		port = portNr;
	}
	// Invoer is niet correct
	else
	{
		cout << "Please enter a number between 0 and 65536" << endl;
		getInput();
	}
}
